package com.party.core.service.member;

import com.party.common.paging.Page;
import com.party.core.model.member.MemberGroup;
import com.party.core.model.member.MemberGroupOutput;
import com.party.core.model.member.MemberWithPartner;
import com.party.core.model.member.PartnerInfoDetails;
import com.party.core.service.IBaseService;
import com.sun.istack.NotNull;

import java.util.List;
import java.util.Map;

/**
 * @ClassName IMemberGroupService
 * @Description 机构用户
 * @Author yifeng
 * @Date 2019/9/10 17:46
 **/
public interface IMemberGroupService extends IBaseService<MemberGroup> {
    MemberGroup getUnique(MemberGroup memberGroup);

    /**
     * 判断是否为子账号
     *
     * @param id 用户id
     * @return
     * @author yifeng
     * @date 17:37 2019/9/11
     **/
    boolean isChild(String id);

    /**
     * 根据传入的用户id返回机构id
     * 如果传入的用户不是子账号，直接返回
     * 如果传入的用户时子账号，则查询对应的机构id
     *
     * @param id
     * @return
     * @author yifeng
     * @date 14:33 2019/9/12
     **/
    String getPartnerId(String id);

    MemberGroup getPartner(String id);

    /**
     * 获取子级id及自己
     *
     * @param id 父级id
     * @return 子级id及自己
     * @author yifeng
     * @date 14:44 2019/9/12
     **/
    List<String> getChildWithMy(String id);

    /**
     * 是否有子级
     *
     * @param partnerId 父级id
     * @return true/false
     * @author yifeng
     * @date 15:03 2019/9/18
     **/
    boolean hasChild(String partnerId);

    boolean isQueryChild(String memberId);

    /**
     * 根据电话号码查找会员
     *
     * @param phone 电话号码
     * @return 会员信息
     */
    MemberGroup findByPhone(@NotNull String phone, @NotNull Integer type);

    /**
     * 根据登录名查询会员信息
     *
     * @param loginName 登陆名
     * @return 会员信息
     */
    MemberGroup findByLoginName(@NotNull String loginName, Integer type);

    /**
     * 根据用户名查询会员信息
     *
     * @param userName 用户名
     * @return 会员信息
     * @author yifeng
     * @date 14:50 2019/9/23
     **/
    MemberGroup findByUserName(@NotNull String userName);

    /**
     * @param key    username或者mobile
     * @param value
     * @param userId 用户id
     * @param type   用户类型
     * @return
     */
    List<MemberGroup> checkUserName(String key, String value, String userId, Integer type);

    /**
     * 子账号列表
     *
     * @param member
     * @param params
     * @param page
     * @return
     * @author yifeng
     * @date 10:06 2019/9/11
     **/
    List<MemberGroupOutput> childListPage(MemberGroup member, Map<String, Object> params, Page page);

    List<PartnerInfoDetails> getPartnerListData(MemberGroup member, Page page);

    List<PartnerInfoDetails> partnerListPage(PartnerInfoDetails member, Map<String, Object> params, Page page);

    List<MemberWithPartner> getAllPartnersSelectlist();

    List<MemberGroup> webListPage(MemberGroup member, Map<String, Object> params, Page page);

    /**
     * @param loginName     登录名
     * @param queryUserName 是否查用户名
     * @return 旧的用户
     * @Author yifeng
     * @Description 获取手机号对应的旧用户
     * @Date 10:04 2019/5/16
     **/
    MemberGroup findByLoginNameOld(String loginName, boolean queryUserName);

    /**
     * 获取所有的合作商用户id openStatus为1的
     *
     * @return
     */
    List<String> getAllPartnerIds();

    /**
    *
    * 获取所有合作商过滤了openStatus为1的
    * @author yifeng
    * @date 18:06 2019/10/15
    * @param
    * @return
    **/
    List<MemberGroup> getAllPartnerWithName();

    /**
     *
     * 获取所有合作商没有过滤openStatus
     * @author yifeng
     * @date 18:06 2019/10/15
     * @param
     * @return
     **/
    List<MemberGroup> getAllPartnerNoOpenStatus();

    /**
     * 获取tongxingzhe账号
     *
     * @return
     */
    MemberGroup getTXZ();

    MemberGroup getThirdMemberManage();

    List<String> getChild(String partnerId);

    MemberGroup findByPartnerId(String partnerId, String id);

    List<MemberGroup> getChildList(String partnerId);

    /**
     * 获取子级id及自己
     *
     * @param partnerId 父级id
     * @return 子级id及自己
     * @author yifeng
     * @date 14:44 2019/9/12
     **/
    List<MemberGroup> getChildWithMyAndName(String partnerId);

    /**
     * 获取所有子级和自己
     * @param partnerId 父级id
     * @return java.util.List<java.lang.String>
     */
    List<MemberGroup> getAllChildWithMy(String partnerId);

    List<MemberGroup> queryAdminBranchAndXZGSList(String adminId,String partnerId);

    List<String> queryAdminBranchAndXZGSIds(String adminId,String partnerId);
}